<?php

/**
 * Gestion des utilisateurs
 */
class User extends SimpleContentManager
{
    // Attributs
    const COLLECTION = '2';
    
    /**
     * Constructeur
     */
    public function __construct()
    {
        $this->_collection = self::COLLECTION;
        parent::__construct();
    }

    /**
     * Connexion
     *
     * @param string $mail Le courriel de l'utilisateur
     * @param $password Son mot de passe
     * @return bool Si la connexion a réussi ou non
     */
    public function connect($mail, $password)
    {
        $user = $this->findBy('mail', $mail);

        if (is_object($user)) {
            foreach ($user as $id => $dataUser) {
                if ($password == $dataUser['pwd']) {
                    $this->createSession($this->get($id, true));
                    
                    if (isset($_SESSION['REDIRECT_AFTER'])) {
                        $redirect = $_SESSION['REDIRECT_AFTER'];
                        unset($_SESSION['REDIRECT_AFTER']);
                        header('Location: ' . $redirect);
                        exit;
                    } else {
                        return true;
                    }
                }
            }
        }
        return false;
    }

	/**
     * Création de la session utilisateur
     *
     * @param object $user Les données de l'utilisateur
     * @return bool Si la session a été créée ou non
     */
    private function createSession($user)
    {
        $this->disconnect();
        $data['uid']    = (string) $user->_id;
        $data['nom']    = utf8_encode($user->nom);
        $data['prenom'] = utf8_encode($user->prenom);
        $data['mail']   = $user->mail;

        $_SESSION['user'] = $data;
        return true;
    }

    /**
     * Vérifie si l'utilisateur est connecté
     *
     * @return mixed La session si elle existe, false sinon
     */
    public function isConnect()
    {
        return (isset($_SESSION['user']) ? $_SESSION['user'] : false);
    }

    /**
     * Déconnexion de l'utilisateur
     *
     * @return bool Si la session a été détruite ou non
     */
    public function disconnect()
    {
        $_SESSION['user'] = null;
        unset($_SESSION['user']);
        return true;
    }

    public function getGPS($villeID, $adress)
    {
        $v = Base::Load(CLASS_LOC)->getVille($villeID);
        $urlLoc = str_replace(' ', '%20', 'http://maps.google.com/maps/api/geocode/json?address='.$adress.', '.$v[2].'&sensor=false');
        $data = json_decode(file_get_contents($urlLoc));
        if (count($data->results) > 0) {
            return $data->results[0]->geometry->location;
        }
        return (object) array('lat' => 0, 'lng' => 0);
    }

    public function getTop($limit)
    {
        $datas = $this->getAll();
        $i = 0;
        foreach ($datas as $k => $d) {
            if ($i < $limit) {
                $nn = $this->getNote($k);
                if (!empty($nn)) {
                    $user[$k]['nom'] = $d['nom'];
                    $user[$k]['prenom'] = $d['prenom'];
                    $user[$k]['note']= $nn;
                    $i++;
                }
            }
        }
        foreach ($user as $k => $u) {
            $tmp[$u['note']]['id'] = $k;
            $tmp[$u['note']]['nom'] = $u['nom'];
            $tmp[$u['note']]['prenom'] = $u['prenom'];
        }

        ksort($tmp);
        $tmp = array_reverse($tmp, true);

        foreach ($tmp as $k => $tmp2) {
            $chasseur[$tmp2['id']]['nom'] = $tmp2['nom'];
            $chasseur[$tmp2['id']]['prenom'] = $tmp2['prenom'];
            $chasseur[$tmp2['id']]['note'] = $k;
        }

        return $chasseur;
    }

    public function getNote($userID)
    {
        $n_total    = 0;
        $n_nb       = 0;
        $note       = 0;
        $releves    = Base::Load(CLASS_RELEVE)->findBy('chasseur', (string) $userID);
        
        if (is_object($releves)) {
            foreach ($releves as $rel) {
                if (isset($rel['n_total']) && $rel['n_total'] != '') {
                    $n_total += $rel['n_total'];
                    $n_nb += $rel['n_nb'];
                }
            }
        }
        
        return (($n_nb > 0) ? round($n_total / $n_nb) : null);
    }

    public function getNoteNB($userID)
    {
        $r = Base::Load(CLASS_RELEVE)->findBy('chasseur', (string) $userID);
        
        return (empty($r) ? 0 : count((array) $r));
    }
}


/* -- Fin du fichier -- */